﻿using System;

namespace FBGraph
{
    /// <summary>Represents extended permissions that an application may request from a user.</summary>
    /// <remarks>
    /// <para>When a FBGraph user authorizes your application, your application gets access to the user's FBGraph ID. By default, your application can
    /// access all public data in a user's profile, including her name, profile picture, gender, and friend list. If your application needs to
    /// access other parts of the user's profile that may be private, or if your application needs to publish content to FBGraph on a user's behalf,
    /// your application must request extended permissions.</para>
    /// <para>Likewise, to protect the privacy of users who have not explicitly authorized your application, your application will only
    /// be able to access the basic profile information about a user's friends, like their names and profile pictures. If your application
    /// needs to access other data about a user's friends to enable social functionality, you will need to request some of the special friends permissions.</para>
    /// <seealso><a href="http://developers.facebook.com/docs/authentication/permissions">Faceboook Extended Permissions Documentation</a></seealso>
    /// </remarks>
    [Flags]
    public enum ExtendedPermission : long
    {
        /// <summary>Enables your application to post content, comments, and likes to a user's stream and to the streams of the user's friends, without prompting the user each time.</summary>
        [FieldName("publish_stream")]
        PublishStream               = 0x1,

        /// <summary>Enables your application to create and modify events on the user's behalf</summary>
        [FieldName("create_event")]
        CreateEvent                 = 0x2,

        /// <summary>Enables your application to RSVP to events on the user's behalf</summary>
        [FieldName("rsvp_event")]
        RsvpEvent                   = 0x4,

        /// <summary>Enables your application to send messages to the user and respond to messages from the user via text message</summary>
        [FieldName("sms")]
        Sms                         = 0x8,

        /// <summary>Enables your application to perform authorized requests on behalf of the user at any time. By default, most access tokens expire after a short time period to ensure applications only make requests on behalf of the user when the are actively using the application. This permission makes the access token returned by our OAuth endpoint long-lived.</summary>
        [FieldName("offline_access")]
        OfflineAccess               = 0x10,

        /// <summary>Provides access to the user's primary email address in the email property</summary>
        [FieldName("email")]
        Email                       = 0x20,

        /// <summary>Provides access to all the posts in the user's News Feed and enables your application to perform searches against the user's News Feed</summary>
        [FieldName("read_stream")]
        ReadStream                  = 0x40,

        /// <summary>Provides access to the "About Me" section of the profile in the about property</summary>
        [FieldName("user_about_me")]
        UserAboutMe                 = 0x80,

        /// <summary>Provides access to the user's list of activities as the activities connection</summary>
        [FieldName("user_activities")]
        UserActivities              = 0x100,

        /// <summary>Provides access to the full birthday with year as the birthday property</summary>
        [FieldName("user_birthday")]
        UserBirthday                = 0x200,

        /// <summary>Provides access to education history as the education history property</summary>
        [FieldName("user_education_history")]
        UserEducationHistory        = 0x400,

        /// <summary>Provides access to the list of events the user is attending as the events connection</summary>
        [FieldName("user_events")]
        UserEvents                  = 0x800,

        /// <summary>Provides access to the list of groups the user is a member of as the groups connection</summary>
        [FieldName("user_groups")]
        UserGroups                  = 0x1000,

        /// <summary>Provides access to the user's hometown in the hometown property</summary>
        [FieldName("user_hometown")]
        UserHometown                = 0x2000,

        /// <summary>Provides access to the user's list of interests as the interests connection</summary>
        [FieldName("user_interests")]
        UserInterests               = 0x4000,

        /// <summary>Provides access to the list of all of the pages the user has liked as the likes connection</summary>
        [FieldName("user_likes")]
        UserLikes                   = 0x8000,

        /// <summary>Provides access to the user's current location as the current locations property</summary>
        [FieldName("user_location")]
        UserLocation                = 0x10000,

        /// <summary>Provides access to the user's notes as the notes connection</summary>
        [FieldName("user_notes")]
        UserNotes                   = 0x20000,

        /// <summary>Provides access to the user's online/offline presence</summary>
        [FieldName("user_online_presence")]
        UserOnlinePresence          = 0x40000,

        /// <summary>Provides access to the photos the user has been tagged in as the photos connection</summary>
        [FieldName("user_photo_video_tags")]
        UserPhotoVideoTags          = 0x80000,

        /// <summary>Provides access to the photos the user has uploaded</summary>
        [FieldName("user_photos")]
        UserPhotos                  = 0x100000,

        /// <summary>Provides access to the user's family and personal relationships and relationship status</summary>
        [FieldName("user_relationships")]
        UserRelationships           = 0x200000,

        /// <summary>Provides access to the user's religious and political affiliations</summary>
        [FieldName("user_religion_politics")]
        UserReligionPolitics        = 0x400000,

        /// <summary>Provides access to the user's most recent status message</summary>
        [FieldName("user_status")]
        UserStatus                  = 0x800000,

        /// <summary>Provides access to the videos the user has uploaded</summary>
        [FieldName("user_videos")]
        UserVideos                  = 0x1000000,

        /// <summary>Provides access to the user's web site URL</summary>
        [FieldName("user_website")]
        UserWebsite                 = 0x2000000,

        /// <summary>Provides access to work history as the work property</summary>
        [FieldName("user_work_history")]
        UserWorkHistory             = 0x4000000,

        /// <summary>Provides read access to the user's friend lists</summary>
        [FieldName("read_friendlists")]
        ReadFriendlists             = 0x8000000,

        /// <summary>Provides read access to the user's friend requests</summary>
        [FieldName("read_requests")]
        ReadRequests                = 0x10000000,

        /// <summary></summary>
        [FieldName("friends_about_me")]
        FriendsAboutMe              = 0x20000000,

        /// <summary></summary>
        [FieldName("friends_activities")]
        FriendsActivities           = 0x40000000,

        /// <summary></summary>
        [FieldName("friends_birthday")]
        FriendsBirthday             = 0x80000000,

        /// <summary></summary>
        [FieldName("friends_education_history")]
        FriendsEducationHistory     = 0x100000000,

        /// <summary></summary>
        [FieldName("friends_events")]
        FriendsEvents               = 0x200000000,

        /// <summary></summary>
        [FieldName("friends_groups")]
        FriendsGroups               = 0x400000000,

        /// <summary></summary>
        [FieldName("friends_hometown")]
        FriendsHometown             = 0x800000000,

        /// <summary></summary>
        [FieldName("friends_interests")]
        FriendsInterests            = 0x1000000000,

        /// <summary></summary>
        [FieldName("friends_likes")]
        FriendsLikes                = 0x2000000000,

        /// <summary></summary>
        [FieldName("friends_location")]
        FriendsLocation             = 0x4000000000,

        /// <summary></summary>
        [FieldName("friends_notes")]
        FriendsNotes                = 0x8000000000,

        /// <summary></summary>
        [FieldName("friends_online_presence")]
        FriendsOnlinePresence       = 0x10000000000,

        /// <summary></summary>
        [FieldName("friends_photo_video_tags")]
        FriendsPhotoVideoTags       = 0x20000000000,

        /// <summary></summary>
        [FieldName("friends_photos")]
        FriendsPhotos               = 0x40000000000,

        /// <summary></summary>
        [FieldName("friends_relationships")]
        FriendsRelationships        = 0x80000000000,

        /// <summary></summary>
        [FieldName("friends_religion_politics")]
        FriendsReligionPolitics     = 0x100000000000,

        /// <summary></summary>
        [FieldName("friends_status")]
        FriendsStatus               = 0x200000000000,

        /// <summary></summary>
        [FieldName("friends_videos")]
        FriendsVideos               = 0x400000000000,

        /// <summary></summary>
        [FieldName("friends_website")]
        FriendsWebsite              = 0x800000000000,

        /// <summary></summary>
        [FieldName("friends_work_history")]
        FriendsWorkHistory          = 0x1000000000000,

        /// <summary>Provides read access to the inbox, outbox and updates user connections.</summary>
        [FieldName("read_mailbox")]
        ReadMailbox                 = 0x2000000000000
    }
}